using System;
using System.Collections.Generic;
using System.Text;

using System.Data.Common;

using MakeIT.Framework.Data;
using MakeIT.Look.Imagem.Entidades;

namespace MakeIT.Look.Imagem.Negocios
{
	public partial class LookDAOT : DAOT
	{

		public EventotipoVO getEventotipo(int? idEventoTipo, string eventoTipo)
		{
			EventotipoVO eventotipoVO = null;
			List<EventotipoVO> listEventotipoVOs = getEventotipos(idEventoTipo, eventoTipo);
			if (listEventotipoVOs != null && listEventotipoVOs.Count > 0)
			{
				eventotipoVO = listEventotipoVOs[0];
			}
			return eventotipoVO;
		}

		public EventotipoVO getEventotipo(int? idEventoTipo)
		{
			return getEventotipo(idEventoTipo, null);
		}

		public List<EventotipoVO> getEventotipos()
		{
			return getEventotipos(null, null);
		}

		public List<EventotipoVO> getEventotipos(int? idEventoTipo)
		{
			return getEventotipos(idEventoTipo, null);
		}

		public List<EventotipoVO> getEventotipos(int? idEventoTipo, string eventoTipo)
		{
			string where = "WHERE ";
			StringBuilder query = new StringBuilder();

			query.AppendLine("SELECT evt.idEventoTipo as evt_idEventoTipo, evt.eventoTipo as evt_eventoTipo, evt.cadastro as evt_cadastro, evt.cadastradoPor as evt_cadastradoPor, evt.edicao as evt_edicao, evt.editadoPor as evt_editadoPor  ");
			query.AppendLine("FROM eventotipo as evt ");
			if (idEventoTipo != null)
			{
				query.AppendLine(where + "evt.idEventoTipo=@idEventoTipo ");
				where = "AND ";
			}
			if (eventoTipo != null)
			{
				query.AppendLine(where + "evt.eventoTipo LIKE @eventoTipo ");
				where = "AND ";
			}


			query.AppendLine("ORDER BY evt.eventoTipo ");

			DbCommand cmd = this.getCommand();
			cmd.CommandText = query.ToString();

			if (idEventoTipo!= null) cmd.Parameters.Add(getParameter(cmd, "@idEventoTipo", idEventoTipo));
			if (eventoTipo!= null) cmd.Parameters.Add(getParameter(cmd, "@eventoTipo", "%"+eventoTipo+"%"));


			DbDataReader reader = null;
			try
			{
				reader = cmd.ExecuteReader();

				List<EventotipoVO> listEventotipo = new List<EventotipoVO>();

				while (reader.Read())
				{
					EventotipoVO eventotipoVO = EventotipoVO.CreateVO();
					eventotipoVO.idEventoTipo = reader.GetInt32(reader.GetOrdinal("evt_idEventoTipo"));
					eventotipoVO.eventoTipo = reader.GetString(reader.GetOrdinal("evt_eventoTipo"));
					eventotipoVO.cadastro = reader.GetDateTime(reader.GetOrdinal("evt_cadastro"));
					eventotipoVO.cadastradoPor = reader.GetString(reader.GetOrdinal("evt_cadastradoPor"));
					eventotipoVO.edicao = reader.GetDateTime(reader.GetOrdinal("evt_edicao"));
					eventotipoVO.editadoPor = reader.GetString(reader.GetOrdinal("evt_editadoPor"));


					listEventotipo.Add(eventotipoVO);
				}
				reader.Close();
				return listEventotipo;
			}
			catch (Exception ex) { throw ex; }
			finally
			{
				if (reader != null && !reader.IsClosed)
					reader.Close();
			}
		}

		public void setEventotipo(EventotipoVO eventotipoVO)
		{
			StringBuilder query = new StringBuilder();

			query.AppendLine("UPDATE eventotipo ");
			query.AppendLine("SET eventoTipo=@eventoTipo,  cadastro=@cadastro, cadastradoPor=@cadastradoPor, edicao=@edicao, editadoPor=@editadoPor ");
			query.AppendLine("WHERE idEventoTipo=@idEventoTipo ");

			DbCommand cmd = this.getCommand();
			cmd.CommandText = query.ToString();

			cmd.Parameters.Add(getParameter(cmd, "@idEventoTipo", eventotipoVO.idEventoTipo));
			cmd.Parameters.Add(getParameter(cmd, "@eventoTipo", eventotipoVO.eventoTipo));
			cmd.Parameters.Add(getParameter(cmd, "@cadastro", eventotipoVO.cadastro));
			cmd.Parameters.Add(getParameter(cmd, "@cadastradoPor", eventotipoVO.cadastradoPor));
			cmd.Parameters.Add(getParameter(cmd, "@edicao", eventotipoVO.edicao));
			cmd.Parameters.Add(getParameter(cmd, "@editadoPor", eventotipoVO.editadoPor));

			try
			{
				cmd.ExecuteNonQuery();
			}
			catch (Exception ex) { throw ex; }

		}

		public long newEventotipo(EventotipoVO eventotipoVO)
		{
			StringBuilder query = new StringBuilder();

			query.AppendLine("INSERT INTO eventotipo ");
			query.AppendLine("  ( eventoTipo, cadastro, cadastradoPor, edicao, editadoPor ) ");
			query.AppendLine("VALUES ( @eventoTipo, @cadastro, @cadastradoPor, @edicao, @editadoPor ) ");

			DbCommand cmd = this.getCommand();
			cmd.CommandText = query.ToString();

			cmd.Parameters.Add(getParameter(cmd, "@eventoTipo", eventotipoVO.eventoTipo));
			cmd.Parameters.Add(getParameter(cmd, "@cadastro", eventotipoVO.cadastro));
			cmd.Parameters.Add(getParameter(cmd, "@cadastradoPor", eventotipoVO.cadastradoPor));
			cmd.Parameters.Add(getParameter(cmd, "@edicao", eventotipoVO.edicao));
			cmd.Parameters.Add(getParameter(cmd, "@editadoPor", eventotipoVO.editadoPor));


			try
			{
				cmd.ExecuteNonQuery();

				long newID = 0;
				if (tipo.Equals(DBType.MSSql))
				{
					cmd.CommandText = "SELECT IDENT_CURRENT('eventotipo') AS 'Identity' ";
					DbDataReader reader = cmd.ExecuteReader();
					reader.Read();
					newID = (long)reader.GetDecimal(reader.GetOrdinal("Identity"));
					reader.Close();
				}
				else if (tipo.Equals(DBType.MySql))
				{
					newID = ((MySql.Data.MySqlClient.MySqlCommand)cmd).LastInsertedId;
				}
				else if (tipo.Equals(DBType.ODBC))
				{
					//TODO implementar
				}
				else if (tipo.Equals(DBType.ORACLE))
				{
					//TODO implementar
				}
				return newID;
			}
			catch (Exception ex) { throw ex; }

		}

		public void delEventotipo(EventotipoVO eventotipoVO)
		{
			StringBuilder query = new StringBuilder();

			query.AppendLine("DELETE FROM eventotipo ");
			query.AppendLine("WHERE idEventoTipo=@idEventoTipo ");

			DbCommand cmd = getCommand();
			cmd.CommandText = query.ToString();

			cmd.Parameters.Add(getParameter(cmd, "@idEventoTipo", eventotipoVO.idEventoTipo));


			try
			{
				cmd.ExecuteNonQuery();
			}
			catch (Exception ex) { throw ex; }

		}
	}
}
